const fs = require("fs")
const path = require("path")

/**
 * 将date对象转换为月日字符串
 * @param {*} date 日期对象
 * @returns 年月日字符串
 */
function dateToDay(date) {
    let month = date.getMonth() + 1 + ""
    let day = date.getDate() + ""
    return `${month.length > 1 ? month : "0" + month}${day.length > 1 ? day : "0" + day}`
}

/* 将num处理为固定长度，长度不够前面添0 */
function getLengthedNum(num, len) {
    let ret = ""
    for (let i = 0; i < len - (num + "").length; i++) {
        ret += "0"
    }
    ret += num
    return ret
}

function patchRename(dir, prefix, replacer) {

    // 罗列文件名
    let filenames = fs.readdirSync(dir)

    // 将所有wmv按修改时间重新排序
    filenames = filenames.filter(name => name.endsWith(".wmv")).sort(
        (a, b) => fs.statSync(`${dir}/${a}`).mtimeMs - fs.statSync(`${dir}/${b}`).mtimeMs
    )
    // console.log(filenames);

    /* 之前的破烂 */
    // const fileStat = fs.statSync(`${dir}/${filenames[2]}`)
    // console.log(fileStat);
    // // 将文件名映射为文件信息
    // let fileStats = filenames.map(name => fs.statSync(`${dir}/${name}`))
    // console.log(fileStats);

    // const dayFilenameObj = {}

    // // 根据 birthtime 中的创建日期来分组
    // fileStats.forEach(
    //     (stat, i) => {
    //         const day = dateToDay(stat.mtime)
    //         !dayFilenameObj[day] && (dayFilenameObj[day] = [])

    //         // 将序号匹配的文件名丢入
    //         dayFilenameObj[day].push(`${dir}/${filenames[i]}`)
    //     }
    // )
    // console.log(dayFilenameObj);

    // // 对每个文件重命名
    // for (let day in dayFilenameObj) {
    //     dayFilenameObj[day].forEach(
    //         (fpath, i) => {
    //             fs.renameSync(
    //                 fpath,
    //                 `${dir}/2206A-欧阳桫-${day}-${i < 9 ? "0" + (i + 1) : (i + 1)}-${fpath.slice(dir.length + 1)}`
    //             )
    //         }
    //     )
    // }
    // console.log("done!");

    /* 建立老新名称映射对数组 */
    const namePairs = filenames.map(
        (fname, i) => {
            return [
                fname,
                fname.replace(prefix, replacer(i, (filenames.length + "").length))
            ]
        }
    )
    // console.log(namePairs);

    /* 批量重命名 */
    namePairs.forEach(
        ([oldName, newName]) => {
            fs.renameSync(
                path.join(dir, oldName),
                path.join(dir, newName)
            )
        }
    )
    console.log("done!");

}

// const prefix = "2206A-欧阳桫-0608-01-"
// const dir = "D:/Web-2023/web2206/advanced/videos"

// const prefix = /2206A-欧阳桫-\d{4}-第\d节\d?-/g
// const dir = "D:/temp/webpack+nginx打包上线"

patchRename(
    "D:/temp/webpack+nginx打包上线",
    /2206A-欧阳桫-\d{4}-第\d节\d?-/,
    (i, len) => "打包上线" + getLengthedNum(i + 1, len) + "："
)
